package com.xzy.service;

import com.xzy.common.base.PageableResult;
import com.xzy.domain.dto.NameCountDTO;
import com.xzy.domain.dto.UserDynamicQueryDTO;
import com.xzy.domain.dto.UserQueryDTO;
import com.xzy.domain.entity.UserEntity;
import org.springframework.data.domain.Page;

import java.util.List;

/**
 * @author xzy
 * @date 2021/11/1017:15
 */
public interface UserService {
    /**
     * 分页查询
     *
     * @param userQueryDTO - 查询、分页、排序条件
     * @return -
     */
    Page<UserEntity> findPageable(UserQueryDTO userQueryDTO);

    /**
     * 按名称模糊查找
     *
     * @param name - 名称
     * @return -
     */
    List<UserEntity> findByNameLikely(String name);

    /**
     * 按名称模糊查询，并进行排序、分页
     *
     * @param name     - 名称
     * @param pageNo   - 页码
     * @param pageSize - 页数据条数
     * @return -
     */
    Page<UserEntity> findByNameLikelyAndPageable(String name, Integer pageNo, Integer pageSize);

    /**
     * 动态 & 多条件 & 排序 & 分页 & 查询
     *
     * @param qc - 查询、排序、分页条件
     * @return - 查询结果
     */
    PageableResult<UserEntity> dynamicQuery(UserDynamicQueryDTO qc);

    /**
     * 统计各姓名的使用人数
     *
     * @param ageGte - 年龄（大于等于）
     * @param ageLte - 年龄（小于等于）
     * @return - 各姓名的使用人数
     */
    List<NameCountDTO> nameCount(Integer ageGte, Integer ageLte);
}
